#include "RenzoErrorReport.h"
#include "RenzoLog.h"
#include <stdarg.h>

namespace Renzo {
	RENZODERER_API inline void  rzInfo(const char* str, ...) {
		String msg;
		msg.append("INFO: ");
		msg.append(str);

		va_list ap;
		va_start(ap, str);
		Log::instance()->write(msg.c_str(), ap);
		va_end(ap);
	}
	
	RENZODERER_API inline void  rzWarning(const char* str, ...) {
		String msg;
		msg.append("WARNING: ");
		msg.append(str);

		va_list ap;
		va_start(ap, str);
		Log::instance()->write(msg.c_str(), ap);
		va_end(ap);
	}
	
	RENZODERER_API inline void  rzError(const char* str, ...) {
		String msg;
		msg.append("ERROR: ");
		msg.append(str);

		va_list ap;
		va_start(ap, str);
		Log::instance()->write(msg.c_str(), ap);
		va_end(ap);
	}
	
	RENZODERER_API inline void  rzSevere(int exitCode, const char* str, ...) {
		String msg;
		msg.append("SEVERE: ");
		msg.append(str);

		va_list ap;
		va_start(ap, str);
		Log::instance()->write(msg.c_str(), ap);
		va_end(ap);
		
		exit(exitCode);
	}

	Exception::Exception(const String& msg, ...) {
		const char* cMsg = msg.c_str();		
		char cMessage[1024];

		va_list ap;
		va_start(ap, cMsg);				
		vsprintf(cMessage, cMsg, ap); // use vfprintf to accept a list of arguments		
		va_end(ap);

		message.append(cMessage);
	}
}
